#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const inquirer = require('inquirer')
const ejs = require('ejs')
const temlDir = path.join(__dirname, 'templates')
const destDir = process.cwd()

// 封装文件读取写入方法
function copyByRecursion(from, to, answer) {
    // 读取文件目录
    fs.readdir(from,  (err, files) => {
        if (err) throw err
        // 遍历所有文件
        files.forEach(file => {
            // 查看当前文件状态 文件/文件夹
            const state = fs.lstatSync(path.join(from, file))
            // 如果遍历出来的是文件夹要往下一层继续读取文件
            if (state.isDirectory()) {// true为文件夹 false为普通文件
                // 先创建文件再继续遍历
                fs.mkdir(path.join(to, file), (err, res) => {
                    copyByRecursion(path.join(from, file), path.join(to, file), answer)
                })
                
            } else {
                // 普通文件直接写入=》先渲染文件中ejs的内容，然后把最后结果写入
                ejs.renderFile(path.join(from, file), answer, (err, result) => {
                    fs.writeFileSync(path.join(to, file), result)
                })
            }
        })
    })
}

// 发起命令行询问
inquirer.prompt([
    {
        type: 'input',
        name: 'packageName',
        message: 'your package name?',
        default: this.appName
    }, {
        type: 'input',
        name: 'version',
        message: 'current version',
        default: '1.0.0'
    }
]).then(answer => {
    // 命令行询问结束写入文件
    copyByRecursion(temlDir, destDir, answer)
})